package com.sh.rbac.handler;

import com.alibaba.excel.util.BooleanUtils;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;
import org.apache.poi.ss.usermodel.*;

/**
 * 操作日志单元格样式处理器
 *
 * @author wb
 * @since 2024-07-15
 */
public class OperationLogCellStyleHandler implements CellWriteHandler {

    @Override
    public void afterCellDispose(CellWriteHandlerContext context) {
        // 判断是否是表头
        if (BooleanUtils.isNotTrue(context.getHead())) {
            Cell cell = context.getCell();
            Workbook workbook = context.getWriteWorkbookHolder().getWorkbook();
            CellStyle cellStyle = workbook.createCellStyle();
            int columnIndex = cell.getColumnIndex();

            // 操作类型单元格样式
            if (columnIndex == 3) {
                String cellValue = cell.getStringCellValue();
                Font font = workbook.createFont();
                if ("新增".equals(cellValue)) {
                    font.setColor(IndexedColors.GREEN.getIndex());
                } else if ("修改".equals(cellValue)) {
                    font.setColor(IndexedColors.ORANGE.getIndex());
                } else if ("删除".equals(cellValue)) {
                    font.setColor(IndexedColors.RED.getIndex());
                } else if ("批量删除".equals(cellValue)) {
                    font.setColor(IndexedColors.RED.getIndex());
                } else if ("导出".equals(cellValue)) {
                    font.setColor(IndexedColors.BLUE.getIndex());
                } else if ("导入".equals(cellValue)) {
                    font.setColor(IndexedColors.YELLOW.index);
                } else {
                    font.setColor(IndexedColors.BLACK1.index);
                }
                cellStyle.setFont(font);
            }

            // 请求方式单元格样式
            if (columnIndex == 7) {
                String cellValue = cell.getStringCellValue();
                Font font = workbook.createFont();
                if ("PUT".equals(cellValue)) {
                    font.setColor(IndexedColors.ORANGE.getIndex());
                } else if ("POST".equals(cellValue)) {
                    font.setColor(IndexedColors.GREEN.getIndex());
                } else if ("DELETE".equals(cellValue)) {
                    font.setColor(IndexedColors.RED.getIndex());
                } else if ("GET".equals(cellValue)) {
                    font.setColor(IndexedColors.BLUE.getIndex());
                } else {
                    font.setColor(IndexedColors.BLACK.getIndex());
                }
                cellStyle.setFont(font);
            }

            // 操作时间单元格样式
            if (columnIndex == 10) {
                cellStyle.setDataFormat(workbook.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));
            }

            // 操作状态单元格样式
            if (columnIndex == 11) {
                String cellValue = cell.getStringCellValue();
                Font font = workbook.createFont();
                font.setColor("成功".equals(cellValue) ? IndexedColors.GREEN.getIndex() : IndexedColors.RED.getIndex());
                cellStyle.setFont(font);
            }

            // 设置居中
            cellStyle.setAlignment(HorizontalAlignment.CENTER);
            cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);

            // 修改单元格样式
            cell.setCellStyle(cellStyle);

            // 由于这里没有指定dataformat 最后展示的数据 格式可能会不太正确
            // 这里要把 WriteCellData的样式清空， 不然后面还有一个拦截器 FillStyleCellWriteHandler 默认会将 WriteCellStyle 设置到
            // cell里面去 会导致自己设置的不一样
            context.getFirstCellData().setWriteCellStyle(null);

        }
    }
}
